"""API服务层 - 处理HTTP请求和响应"""
from flask import request, jsonify
import utils
from business_logic import semantic_service


def login():
    """登录接口"""
    try:
        data = request.get_json()
        username = data.get('username')
        password = data.get('password')

        # 调用业务逻辑
        session_id, user_info, session, error_msg = semantic_service.login_user(username, password)

        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        return jsonify({
            'success': True,
            'message': '登录成功',
            'data': {
                'token': session_id,
                'userInfo': user_info
            }
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'系统错误: {str(e)}'
        }), 500


def get_user_info():
    """获取用户信息接口"""
    try:
        token = request.headers.get('Authorization')
        if not token:
            return jsonify({
                'success': False,
                'message': '未提供认证令牌'
            }), 401

        user_info, error_msg = semantic_service.get_user_info(token)
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        return jsonify({
            'success': True,
            'message': '获取用户信息成功',
            'data': user_info
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'获取用户信息失败: {str(e)}'
        }), 500


def logout():
    """注销接口"""
    try:
        token = request.headers.get('Authorization')
        semantic_service.logout_user(token)

        return jsonify({
            'success': True,
            'message': '注销成功'
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'注销失败: {str(e)}'
        }), 500


def health_check():
    """健康检查接口"""
    return jsonify({
        'success': True,
        'message': 'API服务运行正常',
        'timestamp': utils.current_date()
    })


# ==================== 文本分析相关API ====================

def analyze_text():
    """文本分析接口 - 智能设备交互意图分类"""
    try:
        # 验证用户身份
        token = request.headers.get('Authorization')
        is_valid, error_msg = semantic_service.validate_user_token(token)
        if not is_valid:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        data = request.get_json()
        text = data.get('text', '').strip()

        # 调用业务逻辑
        result, error_msg = semantic_service.analyze_text(text)
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 400

        return jsonify({
            'success': True,
            'message': '分析完成',
            'data': result
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'分析失败: {str(e)}'
        }), 500


# ==================== 训练数据探索API ====================

def explore_data_overview():
    """训练数据概览接口"""
    try:
        # 验证用户身份
        token = request.headers.get('Authorization')
        is_valid, error_msg = semantic_service.validate_user_token(token)
        if not is_valid:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        # 调用业务逻辑
        data, error_msg = semantic_service.get_data_overview()
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 500

        return jsonify({
            'success': True,
            'message': '获取数据概览成功',
            'data': data
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'获取数据概览失败: {str(e)}'
        }), 500


def get_training_samples():
    """获取训练样本数据（支持分页和筛选）"""
    try:
        # 验证用户身份
        token = request.headers.get('Authorization')
        is_valid, error_msg = semantic_service.validate_user_token(token)
        if not is_valid:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        # 获取查询参数
        page = int(request.args.get('page', 1))
        limit = int(request.args.get('limit', 20))
        category = request.args.get('category', 'all')
        text_length = request.args.get('textLength', 'all')
        has_numbers = request.args.get('hasNumbers', 'all')

        # 调用业务逻辑
        data, error_msg = semantic_service.get_training_samples(page, limit, category, text_length, has_numbers)
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 500

        return jsonify({
            'success': True,
            'message': '获取训练样本成功',
            'data': data
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'获取训练样本失败: {str(e)}'
        }), 500


# ==================== 模型分析API ====================

def get_training_history():
    """获取模型训练历史数据"""
    try:
        # 验证用户身份
        token = request.headers.get('Authorization')
        is_valid, error_msg = semantic_service.validate_user_token(token)
        if not is_valid:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        # 调用业务逻辑
        data, error_msg = semantic_service.get_training_history()
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 500

        return jsonify({
            'success': True,
            'message': '获取训练历史成功',
            'data': data
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'获取训练历史失败: {str(e)}'
        }), 500


def get_model_performance():
    """获取模型性能对比数据"""
    try:
        # 验证用户身份
        token = request.headers.get('Authorization')
        is_valid, error_msg = semantic_service.validate_user_token(token)
        if not is_valid:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        # 调用业务逻辑
        data, error_msg = semantic_service.get_model_performance()
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 500

        return jsonify({
            'success': True,
            'message': '获取模型性能成功',
            'data': data
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'获取模型性能失败: {str(e)}'
        }), 500


def get_confusion_matrix():
    """获取混淆矩阵数据"""
    try:
        # 验证用户身份
        token = request.headers.get('Authorization')
        is_valid, error_msg = semantic_service.validate_user_token(token)
        if not is_valid:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        # 调用业务逻辑
        data, error_msg = semantic_service.get_confusion_matrix()
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 500

        return jsonify({
            'success': True,
            'message': '获取混淆矩阵成功',
            'data': data
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'获取混淆矩阵失败: {str(e)}'
        }), 500


# ==================== 统计数据API ====================

def get_kpi_statistics():
    """获取KPI统计数据"""
    try:
        # 验证用户身份
        token = request.headers.get('Authorization')
        is_valid, error_msg = semantic_service.validate_user_token(token)
        if not is_valid:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        # 调用业务逻辑
        data, error_msg = semantic_service.get_kpi_statistics()
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 500

        return jsonify({
            'success': True,
            'message': '获取KPI数据成功',
            'data': data
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'获取KPI数据失败: {str(e)}'
        }), 500


def get_realtime_predictions():
    """获取实时预测数据流"""
    try:
        # 验证用户身份
        token = request.headers.get('Authorization')
        is_valid, error_msg = semantic_service.validate_user_token(token)
        if not is_valid:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        # 获取参数
        limit = int(request.args.get('limit', 20))

        # 调用业务逻辑
        data, error_msg = semantic_service.get_realtime_predictions(limit)
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 500

        return jsonify({
            'success': True,
            'message': '获取实时预测数据成功',
            'data': data
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'获取实时预测数据失败: {str(e)}'
        }), 500


def get_category_distribution():
    """获取分类分布统计"""
    try:
        # 验证用户身份
        token = request.headers.get('Authorization')
        is_valid, error_msg = semantic_service.validate_user_token(token)
        if not is_valid:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 401

        # 获取时间范围参数
        time_range = request.args.get('timeRange', '7d')

        # 调用业务逻辑
        data, error_msg = semantic_service.get_category_distribution(time_range)
        if error_msg:
            return jsonify({
                'success': False,
                'message': error_msg
            }), 500

        return jsonify({
            'success': True,
            'message': '获取分类分布成功',
            'data': data
        })

    except Exception as e:
        return jsonify({
            'success': False,
            'message': f'获取分类分布失败: {str(e)}'
        }), 500